152题 不是只给指针定义了 没有分配内存吗 为什么可以直接赋值
182题怎么得来的
207题A中的*a++难道不是和D一样不对吗 改变首地址常量
152:指针指向的是一个首地址,题目定义了首地址p,后面直接可以给他赋值,从首地址开始填充数据;
int a = 10; // 定义一个整型变量
int *p = &a; // 定义一个指向整型变量a的指针,并将其指向a的地址
虽然指针本身不占用内存,但是当使用指针时,可能需要分配内存来存储指针所指向的变量或对象。
void reverse(char *s)
{
char temp;
int len = strlen(s);
for (int i = 0; i < len / 2; ++i) {
temp = *(s + i);
*(s + i) = *(s + len - i - 1);
*(s + len - i - 1) = temp;
}
}
该函数的参数为一个指向字符串的指针,函数内部使用指针操作来完成字符串的反转。具体来说,这个函数使用strlen
函数来获取字符串的长度,并使用指针操作将字符串的左右两侧的字符逐个交换。例如,对于字符串"abcde",经过一次循环后,s
指向的字符串就会变为"edcba"。依次循环下去,最终就可以得到反转后的字符串。
int a = 10;
int *p = &a; // 将指针p指向a的地址
p++; // 可以将指针p指向a在内存中的下一个位置,但无法改变p指针的地址常量
上面的语句执行后,指针p
指向了a后面的一个位置(也就是p
增加了4个字节),但p
的地址常量仍然指向a的地址。因此,在第207题中,选项A和D都是错误的,因为它们试图改变指针的地址常量。正确的选项应该是B或C,这两个选项中仅修改了指针指向的变量(即将(*p)++
),而没有修改指针的地址常量。
182: pl是 int即整型指针, 一个整型指针不能套两层 [ ] 所以B选项语法就过不去
p是 int()[3]即指向含3个int类数组的指针, p=a意思是p和a在调用时是等价的, 这在函数传参时比较有用.