c语言字符串指针

Python07

c语言字符串指针,第1张

你的说法有些混乱——C没有字符串变量,自然不可能有字符串的指针;C中只有数组的指针和数组首指针,一维数组的首指针是指向第一个元素的指针,类型是元素的类型,操作一维数组的指针就是这个“首指针”;而数组指针是二级指针,与“首指针”有很多不同,最显著的是首指针+1是第二个元素(下标为1)的地址,而数组指针+1就跑到这个一维数组结束后的那个地方了(要跳过这个一维数组的所有元素)。“即指针名是指向第一个字符的地址”这个说法也不对,应该是“指针名(严格应该叫数组名)是指向第一个字符的”,或“指针名的值是第一个字符的地址”。至于为什么“能用char *s=“abc”;strlen(s)测出s的长度”,那是由于strlen这个函数从()中的指针的地址开始一个单元一个单元(因为一个字符是一个8位单元或叫空间)地向后数,一直数到'\0'为止,把不计'\0'这个单元的累加值返回了,所以就得到了“字符串”的长度。这和printf("%s\n",p)能把p为首地址的“字符串”完全输出是一样的道理。

定义成字符数组的时候,数组名就是指向数组的首地址的指针,数组在一串连续的地址中,当执行复制向后移动指针的时候会依次读取字符,没问题,但是如果是指针,它指向的是在静态区的一串字符串的首地址,你要把指针向后移动,他的下一个指针指向何处就是个问题了,也就是你访问了不属于你的内存地址,所以出错了!!!

声明中 int *s声明 s 是 指针,用于指向整型。

语句中 *s 表示 指针指向的值,s 表示 指针指向的地址。

第4题,int a=3,b=4,c=5 条件 c>b>a 分步计算 为 ((c>b)>a)

(c>b) is true, 得 1, (1<a) is false, 得 0, 0 &&anything 得 0。

0 ? 2:1 三目运算,false 得 冒号后 的 1。答案 1.

strcpy(s,"hello) s 是指针,无字符串存放单元,所以错。

str = "hello"+1 赋值运算不允许,要用函数

*&(str+1) 中 涉及左值,不允许。

s = str+1正确,地址运算,让 s 指向 str[1] 的地址。