Tag: 指针

C指针和物理地址

我刚刚开始C.我已阅读各种书籍/教程中的指针,我理解基础知识。 但有一点我没有看到解释的是数字是多少。 例如: int main(){ int anumber = 10; int *apointer; apointer = &anumber; printf(“%i”, &apointer); } 可能会返回一个像4231168这样的数字。这个数字代表什么? 它是RAM中的一些存储名称吗?

C中的指针比较是签名还是未签名?

嗨,我确定这一定是一个常见的问题,但是当我搜索它时,我找不到答案。 我的问题主要涉及两个方面。 我想比较他们的地址,并确定一个是否比另一个大。 我希望在比较期间所有地址都是无符号的。 这是真的,它在C89,C99和C ++之间有所不同吗? 当我用gcc编译时,比较是无符号的。 如果我有两个指针,我正在比较这样: char *a = (char *) 0x80000000; //-2147483648 or 2147483648 ? char *b = (char *) 0x1; 然后a更大。 这是否由标准保证? 编辑以更新我想要做的事情。 我有一种情况,我想确定如果有算术错误,它不会导致指针超出界限。 现在我有数组的起始地址和结束地址。 如果出现错误并且指针计算错误,并且在数组内存的有效地址之外,我想确保不会发生访问冲突。 我相信我可以通过比较另一个函数返回的可疑指针并确定它是否在数组的可接受范围内来防止这种情况。 负面和正面地址的问题与我是否可以进行比较有关,正如我在原始问题中所讨论的那样。 到目前为止,我很欣赏答案。 根据我的编辑,你会说我正在做的是gcc和msvc中未定义的行为吗? 这是一个仅在Microsoft Windows上运行的程序。 这是一个简单的例子: char letters[26]; char *do_not_read = &letters[26]; char *suspect = somefunction_i_dont_control(letters,26); if( (suspect >= letters) && (suspect < do_not_read) […]

不支持在c或c ++中添加两个指针。 为什么?

为什么在c或c ++中不支持添加两个指针。 当我做, int *ptr,*ptr1; int sum = ptr + ptr1; C或C ++抛出错误。 虽然它支持, int diff = ptr – ptr1;

动态分配数组解释

这是我的老师向我们展示的示例代码“如何在C中动态分配数组?”。 但我不完全理解这一点。 这是代码: int k; int** test; printf(“Enter a value for k: “); scanf(“%d”, &k); test = (int **)malloc(k * sizeof(int*)); for (i = 0; i < k; i++) { test[i] = (int*)malloc(k * sizeof(int)); //Initialize all the values } 我想在C中,要定义一个数组,你必须把[]放在名字之后,那么究竟是什么是int** test ; 它不仅仅是一个指针指针吗? 而malloc()行也让我感到困惑…..

**在**中意味着什么

当一个物体在开头有2个星号时,它意味着什么? **variable

指针比较“>”与数组对象的第一个元素之前的一个

根据该主题 ,允许将指针与数组对象的最后一个元素之一进行比较。 根据@jalf注释,禁止在数组对象的第一个元素之前将指针与一个进行比较。 例1 int array[10]; int *ptr; for(ptr=&array[9]; ptr>(array-1); ptr–) {…} 例题 int array[10]; int *ptr; for(ptr=&array[9]; ptr>=(array); ptr–) {…} 1)是否禁止example1和example2 ? 2)C标准是否有证据表明禁止在数组对象的第一个元素之前比较指针?

左值需要错误

在使用指针时,我编写了以下代码, int main() { int a[]={10,20,30,40,50}; int i; for(i=0;i<5;i++) { printf("\n%d",*a); a++; } return 0; } 现在根据我的理解,数组名称本身是c中的地址,根据我的知识,完成的指针算法是正确的。 但是当我尝试运行代码时,它给了我“Lvalue Required”错误。 那么出现Lvalue所需错误的确切原因是什么呢?因为在此之前我也遇到过这种错误的情况。 其次,为什么在这种情况下指针的算术在这里不合法?

将C ++函数指针转换为c函数指针

我正在使用C库开发C ++应用程序。 我必须向C库发送一个函数指针。 这是我的class级: class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); private: Ui::MainWindow *ui; void f(int*); private slots: void on_btn_clicked(); }; 这是我的on_btn_clicked函数: void MainWindow::on_btn_clicked() { void (MainWindow::* ptfptr) (int*) = &MainWindow::f; c_library_function(static_cast(ptfptr), NULL); } C函数应该得到一个指向这样一个函数的指针:void f(int *)。 但上面的代码不起作用,我无法成功将我的f成员函数转换为所需的指针。 有人可以帮忙吗?

typedef的指针类型被认为是不好的做法吗?

可能重复: Typedef指针好主意? 我在许多使用过的API中都看到了这种奇怪之处: typedef type_t *TYPE; 我的观点是声明一个TYPE的变量并不能说明实际上是一个指针被声明了。 你和我一样认为这会带来很多困惑吗? 这是否意味着强制执行封装,还是有其他原因? 你认为这是一种不好的做法吗?

使用字符指针和字符数组之间的区别

基本问题。 char new_str[]=””; char * newstr; 如果我必须将一些数据连接到它或使用字符串函数如strcat / substr / strcpy,两者之间的区别是什么? 我知道我必须为char *方法分配内存(第2行)。 我不确定怎么样。 const char *和字符串文字是一样的吗? 我需要了解更多。 有人能指出一些不错的详尽内容/材料吗?